Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SOLR-16825: Migrate v2 API definitions to 'api' module, pt 9 #2870

Merged

Conversation

gerlowskija
Copy link
Contributor

https://issues.apache.org/jira/browse/SOLR-16825

Description

SOLR-16825 added a new gradle module, 'api', which holds v2 API definitions as interfaces. This allows us to generate an OAS (and SolrRequest implementations from that) as a part of the solrj build.

But these artifacts (the OAS and generated Java code), only cover the v2 APIs that have interfaces in the 'api' module. We need to extract interfaces to live in 'api' for each v2 API in 'core' that doesn't already have one.

Solution

This PR creates 'api' interfaces for a number of v2 APIs, allowing them to be included in Solr's generated clients. The following APIs are covered in this PR:

  • zk list children
  • zk fetch node
  • restore collection
  • list-collection-snapshots
  • replication "backup"

This is the last needed "migration" of JAX-RS APIs from solr-core to solr-api. After this PR, SOLR-16825 can be closed out!

Tests

Existing tests continue to pass

Checklist

Please review the following and check all that apply:

  • I have reviewed the guidelines for How to Contribute and my code conforms to the standards described there to the best of my ability.
  • I have created a Jira issue and added the issue ID to my pull request title.
  • I have given Solr maintainers access to contribute to my PR branch. (optional but recommended, not available for branches on forks living under an organisation)
  • I have developed this patch against the main branch.
  • I have run ./gradlew check.
  • I have added tests for my changes.
  • I have added documentation for the Reference Guide

Prior to this CollectionSnapshotMetaData and CoreSnapshotMetadata
contained application/serialization logic, and references to other
'core' classes, making it hard for our OpenAPI spec to model these
responses.

This commit attempts to refactor the snapshot code so that the response
objects live in our 'api' module, with the related logic remaining in
core.

Has not been tested or validated yet.
My guess is that whatever is writing the data into ZK is not properly
getting the enum value, but is instead writing out a sketchy toString
value that then fails to deserialize when read later on.

From some unit testing it looks like Jackson can serialize the enum just
fine. I'm suspecting it's Javabin that can't, which is the default
format used for SolrJ requests.  I could probably fix this by having the
test use the generated SolrRequest, but that would leave things broken
for anyone not using that class, so it's not a real fix.

I'm gonna put a pin in things for now, but I can probably return to this
later on if I get time.
Without the '@produces' annotation on the interface, the API was trying
to respond with 'javabin', which caused the test to fail.  This commit
adds back in the '@produces' annotations, so that Solr knows to use
RawResponseWriter to write out the file content.

I don't think we want to use '@produces' generally, but this API is a
reasonable exception.
@gerlowskija gerlowskija merged commit 1b966ec into apache:main Nov 21, 2024
3 checks passed
@gerlowskija gerlowskija deleted the SOLR-16825-migrate-to-api-module-pt-9 branch November 21, 2024 19:16
gerlowskija added a commit that referenced this pull request Nov 21, 2024
SOLR-16825 added a new gradle module, 'api', which holds v2 API
definitions as interfaces.  This allows us to generate an OAS (and other
artifacts) as a part of the solrj build.  But these artifacts only cover
the v2 APIs present in the 'api' module.

This commit moves all remaining v2 API defining annotations to new
interfaces in the 'api' module. These APIs are now reflected in our OAS
and generated artifacts.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant